import { forEachValue } from "../utils.js";
/**
 *  模块类
 *  每个模块都有一个state，mutations，actions，getters，modules
 */
export default class Module {
  constructor(rawModule) {
    this._raw = rawModule;
    this._children = {};
    this.state = rawModule.state;
    this.namespaced = rawModule.namespaced || false; //自己是否开启命名空间
  }
  /**
   *  添加子模块
   * @param {*} key 子模块的key
   * @param {*} module 子模块的实例
   */
  addChild(key, module) {
    this._children[key] = module;
  }
  /**
   * 获取子模块
   * @param {*} key 子模块的key
   * @returns 子模块的实例
   */
  getChild(key) {
    return this._children[key];
  }
  /**
   * 遍历子模块
   * @param {*} fn 回调函数 ( 子模块的实例, 子模块的key )
   */
  forEachChild(fn) {
    forEachValue(this._children, fn);
  }
  forEachGetter(fn) {
    if (this._raw.getters) {
      forEachValue(this._raw.getters, fn);
    }
  }
  forEachAction(fn) {
    if (this._raw.actions) {
      forEachValue(this._raw.actions, fn);
    }
  }
  forEachMutation(fn) {
    if (this._raw.mutations) {
      forEachValue(this._raw.mutations, fn);
    }
  }
}
